package com.hanxiaozhang.system.entity;

import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hanxiaozhang.annotation.Sensitive;
import com.hanxiaozhang.base.BaseEntity;
import com.hanxiaozhang.constant.SensitiveTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;
import java.time.LocalDateTime;


/**
 * 用户表
 *
 * @author hanxiaozhang
 * @email hanxiaozhang2018@sina.com
 * @date 2021-04-02
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class UserEntity extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户主键
     */
    private Long userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 名称
     */
    private String name;

    /**
     * 昵称
     */
    private String nickName;

    /**
     * 密码
     */
    @JsonIgnore
    @Sensitive(type = SensitiveTypeEnum.ALL)
    private String password;

    /**
     * 性别
     */
    private Integer sex;

    /**
     * 出身日期
     */
	@DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birth;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 状态 0:禁用，1:正常
     */
    private Integer status;

    /**
     * 国家
     */
    private Integer country;

    /**
     * 省
     */
    private Integer province;

    /**
     * 市
     */
    private Integer city;

    /**
     * 县
     */
    private Integer county;

    /**
     * 地址
     */
    private String address;

    /**
     * 头像地址
     */
    private String headHeadPath;

    /**
     * 个性签名
     */
    private String signature;

    /**
     * 个人简介
     */
    private String introduction;

    /**
     * 修改密码的时间
     */
    private LocalDateTime passwordLastUpdateDate;

    /**
     * 类型
     */
    private Integer type;


}
